package com.glsc.ngateway.platform.service.easyflow.strategy;

import cn.hutool.core.util.StrUtil;
import com.glsc.ngateway.common.base.domain.mysql.gateway.platform.easyflow.FlowFormRemindMain;
import com.glsc.ngateway.common.base.exception.PlatformException;
import com.glsc.ngateway.platform.service.easyflow.AbstractEasyFlowTaskHandle;
import com.glsc.ngateway.platform.service.easyflow.dto.FlowDataDto;
import com.glsc.ngateway.platform.service.easyflow.enums.GWSystemRemindTaskEnum;
import com.glsc.ngateway.platform.service.easyflow.enums.ProcessDefineKeyEnum;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component;

import javax.annotation.PostConstruct;

@Component
@Slf4j
public class RemindFlowTaskHandle extends AbstractEasyFlowTaskHandle<FlowFormRemindMain> {

    /**
     * 初始化节点分派逻辑
     * key: 节点类型 value: 对应方法
     */
    @PostConstruct
    public void init() {
        //节点审核前个性化处理
        taskPassBeforeHandleMap.put(GWSystemRemindTaskEnum.beginTask.getValue(), this::taskHandleDemo);

        //节点审核后个性化处理
        taskPassAfterHandleMap.put(GWSystemRemindTaskEnum.beginTask.getValue(), this::taskHandleDemo);

        //审核驳回后的个性化处理
        taskRejectBeforeHandleMap.put(GWSystemRemindTaskEnum.beginTask.getValue(), this::taskHandleDemo);

        //审核驳回后的个性化处理
        taskRejectAfterHandleMap.put(GWSystemRemindTaskEnum.beginTask.getValue(), this::taskHandleDemo);

        log.info("已经加载工作流程{}-任务理策略，taskCreateHandleMap={}，taskPassBeforeHandleMap={}" +
                        "，taskPassAfterHandleMap={}，taskRejectAfterHandleMap={}"
                , this.getProcessDefineKey(), taskCreateHandleMap.size(), taskPassBeforeHandleMap.size()
                , taskPassAfterHandleMap.size(), taskRejectAfterHandleMap.size());
    }

    @Override
    public String getProcessDefineKey() {
        return ProcessDefineKeyEnum.GWSystemRemind.getCode();
    }

    /**
     * 流程创建前的检查
     */
    @Override
    public void handleProcessBeforeCreate(FlowDataDto<FlowFormRemindMain> flowDataDto) {
        if (StrUtil.isEmpty(flowDataDto.getFormMainData().getRemindUserName())) {
            throw PlatformException.error("提醒人不能为空");
        }

        //设置提醒用户组
        flowDataDto.getTaskAssignee().put("remindUserGroup",flowDataDto.getFormMainData().getRemindUserAccount());
    }
}
